package cn.group7.padserver.controller;

import cn.group7.padserver.common.Flag;
import cn.group7.padserver.controller.responseformat.Code;
import cn.group7.padserver.controller.responseformat.Result;
import cn.group7.padserver.service.FileService;
import cn.hutool.core.util.StrUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;


/**
 * @author TexBin
 */
@RestController
@RequestMapping("/file")
@CrossOrigin
@MultipartConfig(
        maxFileSize = 1024 * 1024 * 10,
        maxRequestSize = 1024 * 1024 * 10 * 5
)
public class FileController {


    @Resource
    private FileService fileService;

    /**
     * 上传文件
     *
     * @param file 文件
     * @return 上传成功返回结果
     */

    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {
        if (file != null) {
            String url = fileService.upload(file);
            System.out.println(url);
            return Result.builder().flag(Flag.SUCCESS.isCode()).code(Code.ADD_SUCCESS.getCode())
                    .message(Code.ADD_SUCCESS.getInfo()).data(url).build();
        }
        return Result.builder().flag(Flag.FAIL.isCode()).code(Code.ADD_FAIL.getCode())
                .message(Code.ADD_FAIL.getInfo()).build();
    }


    /**
     * 下载文件
     *
     * @param fileName 要下载的文件的名称
     * @param response 响应对象
     */
    @GetMapping("/download/{fileName}")
    public String download(@PathVariable String fileName, HttpServletResponse response) {
        if (!StrUtil.isBlank(fileName)) {
            if (fileService.download(fileName, response)) {
                return  "成功获取文件！";
            }
        }
        return  "无法获取该文件！";
    }


    /**
     * 删除文件
     *
     * @param fileName 要删除的文件的名称
     * @return 执行结果
     */
    @DeleteMapping("/delete/{fileName}")
    public String delete(@PathVariable String fileName) {
        if (fileName != null) {
            if (fileService.delete(fileName)) {
                return "文件删除成功！";
            }
        }
        return "无法删除该文件！";
    }


//    /**
//     * 编辑器上传的图片或者视频
//     *
//     * @param file 文件
//     * @return editor 以规定的格式返回结果
//     * @throws IOException 异常
//     */
//    @PostMapping("/editor/upload")
//    public Dict editorUpload(MultipartFile file) throws IOException {
//        if (file != null) {
//            //获取文件的原始名称（xxx.txt/xxx.png...）
//            String originalFilename = file.getOriginalFilename();
//            //获取文件名（无后缀）
//            String mainName = FileUtil.mainName(originalFilename);
//            //获取文件后缀
//            String suffix = FileUtil.extName(originalFilename);
//            //获取当前项目的路径
//            String projectPath = System.getProperty("UserMapper.dir");
//            //设置服务器文件存储路径
//            String filePath = projectPath + "\\files";
//            //尝试保存文件
//            File saveFile = new File(filePath + "\\" + mainName + "." + suffix);
//            //如果已有文件存在,另起名
//            if (saveFile.exists()) {
//                mainName = System.currentTimeMillis() + "-" + mainName;
//                saveFile = new File(filePath + "\\" + mainName + "." + suffix);
//            }
//            try {
//                //存储文件到本地磁盘
//                file.transferTo(saveFile);
//                //返回一个文件链接的下载地址
//                String url = "http://" + ip + ":" + port + "/file/download/" + mainName + "." + suffix;
//
//                //判断文件类型，如果是视频对应的格式
//                if ("mp4".equals(suffix)) {
//                    return Dict.create().set("errno", 0).set("data", Dict.create().set("url", url));
//                }
//                //如果是图片
//                return Dict.create().set("errno", 0).set("data", CollUtil.newArrayList(new Dict().set("url", url)));
//            } catch (IOException e) {
//                throw new IOException("文件上传失败！");
//            }
//        }
//        return Dict.create().set("errno", 1).set("data", CollUtil.newArrayList());
//    }
}
